#ifndef DELAY_TASK_H_
#define DELAY_TASK_H_

#include "Average.hh"
#include "Stopwatch.hh"
#include "Task.hh"

//
/**
 * \file StressTask.hh
 * \author  jsk <jsk.jinsubkim@gmail.com>
 * \version 1.0
 *
 * \class StressTask StressTask.hh
 *
 * 지정 받은 시간동안 대기한다.
 * 
 * 태스크를 시뮬레이션 하기위해서 사용한다.
 */
class StressTask : public Task
{
public:
	/**
	 * \name StressTask
	 */
	StressTask();
	
	/**
	 * \name StressTask
	 * \param Data 처리할 데이터.
	 */
	StressTask(void* Data);
	
	/**
	 * \name perform
	 * 
	 * 특정 작업을 수행한다.
	 * 
	 * \return 
	 * 
	 * 성공할 경우 RETURN_OK, 
	 * 실패할 경우 RETURN_OK가 아닌 값.
	 */
	virtual ResultOf perform();
	
	/**
	 * \name setData
	 * 
	 * 작업에 사용할 데이터를 설정한다.
	 * 
	 * \return 
	 * 
	 * 성공할 경우 RETURN_OK, 
	 * 실패할 경우 RETURN_OK가 아닌 값.
	 */
	virtual ResultOf setData(void* Data);
	
	/**
	 * \name tellResponseTime
	 * 
	 * 
	 * 
	 * \return 
	 * 
	 * 성공할 경우 RETURN_OK, 
	 * 실패할 경우 RETURN_OK가 아닌 값.
	 */
	static double tellResponseTime();
	
protected:
	/**
	 * 대기 시간.
	 * 마이크로 초.
	 */
	Number Count;
	
	/**
	 * Timer
	 */
	Stopwatch Timer;
	
	/**
	 * ???
	 */
	static Average ResponseTime;
};

#endif //DELAY_TASK_H_